package cn.yitun.chat.yitunserverimcore.general.main.push.room;

import cn.yitun.chat.yituncommonmessage.impl.HeadImpl;
import cn.yitun.chat.yituncommonmessage.push.PushMessage;
import cn.yitun.chat.yituncommonutil.YitunStringUtil;
import cn.yitun.chat.yitunservercommonlib.constant.ActionTypeConstant;
import cn.yitun.chat.yitunservercommonlib.dataentity.vo.system.user.UserVo;
import cn.yitun.chat.yitunservercommonlib.enums.control.push.room.RoomPushMethodEnum;
import cn.yitun.chat.yitunservercommonlib.util.codec.IdGen;
import cn.yitun.chat.yitunserverimcore.bridge.net.WriteHandler;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 聊天室相关推送
 * @author: yitun
 * @date: 2016年8月26日 上午9:21:41
 */
@Service
public class RoomPush {
	//1.4.100
	final String action = ActionTypeConstant.ROOM_ACTION_PUSH;

	@Resource
	WriteHandler writeHandler;

	/**
	 * 推送用户加入聊天室信息
	 * @author: yitun
	 * @createDate: 2016年11月29日 上午10:42:50
	 * @update: yitun
	 * @updateDate: 2016年11月29日 上午10:42:50
	 */
	public void pushUserJoinRoom(Long roomId, UserVo userData, List<Long> userIdList) {
		PushMessage message=new PushMessage();
		message.bodyPut("roomId", roomId);
		message.bodyPut("userId", userData.getId());
		message.bodyPut("userData", userData);

		HeadImpl head = new HeadImpl();
		head.setAction(action);
		head.setMethod(RoomPushMethodEnum.USER_JOIN_ROOM.getMethod());
		head.setKey(IdGen.getNumber());
		head.setTimestamp(System.currentTimeMillis());
		message.setHead(head);
		writeHandler.push(YitunStringUtil.toStrList(userIdList), message);
	}

	/**
	 * 推送用户退出聊天室信息
	 * @author: yitun
	 * @createDate: 2016年11月29日 上午10:43:10
	 * @update: yitun
	 * @updateDate: 2016年11月29日 上午10:43:10
	 */
	public void pushRoomRemoveUser(Long roomId, Long userId, List<Long> userIdList) {
		PushMessage message=new PushMessage();
		message.bodyPut("roomId", roomId);
		message.bodyPut("userId", userId);

		HeadImpl head = new HeadImpl();
		head.setAction(action);
		head.setMethod(RoomPushMethodEnum.REMOVE.getMethod());
		head.setKey(IdGen.getNumber());
		head.setTimestamp(System.currentTimeMillis());
		message.setHead(head);
		writeHandler.push(YitunStringUtil.toStrList(userIdList), message);
	}

	/**
	 * 推送聊天室禁言信息
	 * @author: yitun
	 * @createDate: 2016年11月29日 上午11:30:09
	 * @update: yitun
	 * @updateDate: 2016年11月29日 上午11:30:09
	 */
	public void pushRoomBan(Long roomId, boolean isBan, List<Long> userIdList) {
		PushMessage message=new PushMessage();
		message.bodyPut("roomId", roomId);
		message.bodyPut("isBan", isBan);

		HeadImpl head = new HeadImpl();
		head.setAction(action);
		head.setMethod(RoomPushMethodEnum.BAN.getMethod());
		head.setKey(IdGen.getNumber());
		head.setTimestamp(System.currentTimeMillis());
		message.setHead(head);
		writeHandler.push(YitunStringUtil.toStrList(userIdList), message);
	}

	/**
	 * 推送聊天室用户禁言信息
	 * @param roomId
	 * @param userId
	 * @param isBan
	 * @param time
	 */
	public void pushRoomUserBan(Long roomId, Long userId, boolean isBan,long time) {
		PushMessage message=new PushMessage();
		message.bodyPut("roomId", roomId);
		message.bodyPut("userId", userId);
		message.bodyPut("isBan", isBan);
		message.bodyPut("time", time);

		HeadImpl head = new HeadImpl();
		head.setAction(action);
		head.setMethod(RoomPushMethodEnum.USER_BAN.getMethod());
		head.setKey(IdGen.getNumber());
		head.setTimestamp(System.currentTimeMillis());
		message.setHead(head);
		writeHandler.push(userId, message);
	}
}
